package cn.tedu;

import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

public class Main {
    //代理
    public static void main(String[] args) {

        //构建目标代理对象
        Enhancer enhancer = new Enhancer();//代理对象的增强器
        enhancer.setSuperclass(ConfigBeans.class);//指定代理目标
        /**
         * setCallback 设置回调方法
         * 专门用于方法拦截
         */
        enhancer.setCallback(new MethodInterceptor() {
            /**
             *
             * @param o 表示目标对象
             * @param method 表示目标方法
             * @param objects 表示方法参数
             * @param methodProxy
             * @return
             * @throws Throwable
             */
            @Override
            public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
                System.out.println("目标方法被拦截,调用方法之前执行");
                methodProxy.invokeSuper(o,objects);

                System.out.println("目标方法执行完成,调用目标方法之后执行");
                return null;
            }
        });
        ConfigBeans configBeans = (ConfigBeans) enhancer.create();
        configBeans.huaweiPhone();
    }
}
